<!DOCTYPE html>
<html lang="zh-cn"><head>
<title>RainbowC0&#39;s Blog - 在 Linux ARM64 上高效运行 x86 程序：Box86</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<meta name="description"
    content="原理
Box86 号称是 Linux 下的 Rosseta2，可以在 Linux ARM 系统上运行 x86 程序。相比 Qemu User Mode、Rosseta2，它的运行速度更快。 ">
<link rel="canonical" href="https://rainbowc0.gitee.io/post/run-x86-on-linux-arm64/" />

<link rel="icon" type="image/x-icon" href="/favicon/favicon.ico">
  



<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/normalize.css@8.0.1/normalize.css">

<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.6/build/pure-min.css">







<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.css">



<link rel="stylesheet" href="/css/hugo-tufte.min.css">

<link rel="stylesheet"  href="/css/hugo-tufte-override.css">



</head>
<body >
        
<div id="layout" class="pure-g">
  <article class="pure-u-1">
    <header class="brand">
  <a href="https://rainbowc0.gitee.io/"><h1>RainbowC0&#39;s Blog</h1></a>
  <h2>惟精惟一，允执厥中。</h2>
  <nav class="menu">
    <ul>
    
        <li><a href="/"><i class="fas fa-home la-lg"></i>HOME</a></li>
    
        <li><a href="/post"><i class="fas fa-book" fa-lg></i>POSTS</a></li>
    
        <li><a href="/categories"><i class="fas fa-tag fa-lg"></i>CATEGORIES</a></li>
    
        <li><a href="/tags"><i class="fas fa-tags fa-lg"></i>TAGS</a></li>
    
        <li><a href="/about"><i class="fas fa-info-circle fa-lg"></i>ABOUT</a></li>
    
        <li><a href="https://gitee.com/RainbowC0/RainbowC0"><i class="fab fa-github fa-lg"></i>SOURCE CODE</a></li>
    
    </ul>
</nav>

  <hr />
</header>

    <section>
  
  <h1 class="content-title">
    
    <a href="/post/run-x86-on-linux-arm64/">在 Linux ARM64 上高效运行 x86 程序：Box86</a>
    
  </h1>
  
    
    
      <span class="content-meta">
        
    
            
        
          <i class="fa fa-calendar"></i>
          &nbsp;Dec 7, 2022
        
    
        
          &nbsp;<i class="fa fa-clock-o"></i>
          &nbsp;1 min read
        
    
        
          <br>
          <i class="fa fa-tags"> </i>
          
            <a  href="https://rainbowc0.gitee.io/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA">计算机</a>
          
        
      </span>
    
  
  </section>
    
<section>
  <details closed class="toc">
    <summary>Contents</summary>
    <nav id="TableOfContents">
  <ul>
    <li><a href="#原理">原理</a></li>
    <li><a href="#安装测试环境">安装测试环境</a></li>
    <li><a href="#下载-box86-软件包">下载 Box86 软件包</a></li>
    <li><a href="#安装-box86">安装 Box86</a></li>
    <li><a href="#安装-x86-交叉编译环境">安装 x86 交叉编译环境</a></li>
    <li><a href="#测试">测试</a></li>
  </ul>
</nav>
  </details>
</section>


    <section><h2 id="原理">原理</h2>
<p><a href="https://box86.org">Box86</a> 号称是 Linux 下的 <a href="https://support.apple.com/zh-cn/guide/security/secebb113be1/web">Rosseta2</a>，可以在 Linux ARM 系统上运行 x86 程序。相比 <a href="https://www.qemu.org/docs/master/user/index.html">Qemu User Mode</a>、Rosseta2，它的运行速度更快。</p>
<p>Qemu User Mode 在处理 x86 的可执行程序时会把所有机器码一一翻译成 ARM 的机器码然后执行，包括底层的库也会被翻译，所以效率特别低。而 Box86 支持用 ARM 的依赖库运行 x86 程序，可想而知，Box86 对于一些依赖库是直接用 ARM 本地的库代替，而没有翻译 x86 的依赖库，因而效率更高。（其实我不大懂 Box86。）</p>
<p>需要特别说明的是，<strong>Box86 为 32 位 ARM 程序，对于不兼容 32 位的 ARM64 处理器（如 Apple Silicon 系列）无效</strong>。</p>
<h2 id="安装测试环境">安装测试环境</h2>
<p>Ubuntu Jammy aarch64 [on qemu]</p>
<h2 id="下载-box86-软件包">下载 Box86 软件包</h2>
<p>官方的安装教程是编译安装，比较费时，所以我找了针对 Debian 系列发行版的软件包（.deb）。</p>
<p>下载链接：</p>
<ul>
<li>官方：<a href="https://raw.githubusercontent.com/ryanfortner/box86-debs/master/debian/box86_0.2.9%2B20221204.cb09b09-1_armhf.deb">https://raw.githubusercontent.com/ryanfortner/box86-debs/master/debian/box86_0.2.9%2B20221204.cb09b09-1_armhf.deb</a></li>
<li>网盘：<a href="https://wwie.lanzouf.com/icUEI0i3ukmj">https://wwie.lanzouf.com/icUEI0i3ukmj</a><br>
密码:h52e</li>
</ul>
<h2 id="安装-box86">安装 Box86</h2>
<ul>
<li>将下载的软件包复制到 Linux 系统上。</li>
<li>在 CLI（Command Line Interface） 中输入以下命令，用以添加 armhf 架构支持：</li>
</ul>
<pre><code>sudo dpkg --add-architecture armhf
</code></pre>
<ul>
<li>输入以下命令以安装 <code>box86.deb</code> 软件包：</li>
</ul>
<pre><code>sudo dpkg -i &lt;软件包的路径&gt;
</code></pre>
<ul>
<li>输入以下命令可安装 armhf 的依赖库，以兼容 armhf 的程序（<code>box86</code> 本来是 32 位 ARM 软件包）：</li>
</ul>
<pre><code>sudo apt install libc6:armhf
</code></pre>
<ul>
<li>执行 <code>box86 -v</code> 查看是否已安装成功：</li>
</ul>
<pre><code>root@ubuntu:/home/rainbow# box86 -v
Box86 with Dynarec v0.2.9 cb09b097 built on Dec  4 2022 06:29:36
</code></pre>
<h2 id="安装-x86-交叉编译环境">安装 x86 交叉编译环境</h2>
<p>执行以下命令安装交叉编译环境，以编译 x86 程序：</p>
<pre><code>sudo apt install gcc-multilib-i686-linux-gnu
</code></pre>
<p>查看该软件包内可用的命令行工具：</p>
<pre><code>ls /usr/bin|grep i686
</code></pre>
<p>可以看到一堆以 <code>i686-linux-gnu-</code> 开头的命令行工具。其中 <code>i686-linux-gnu-gcc</code> 就是 x86 的 GCC 编译器。</p>
<h2 id="测试">测试</h2>
<p>随便写一个 C 语言程序，测试能否编译运行：</p>
<pre><code class="language-c">#include&lt;stdio.h&gt;

int
main(void)
{
    printf(&quot;Hello\n&quot;);
    return 0;
}
</code></pre>
<p>编译：</p>
<pre><code>i686-linux-gnu-gcc -Wall m.c -o m
</code></pre>
<p>确认生成的文件格式是 Intel X86 可执行文件：</p>
<pre><code>root@ubuntu:/home/rainbow# file m
m: ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, BuildID[sha1]=a8923486e8a80b2b3f2929443d0fba2f3bdef863, for GNU/Linux 3.2.0, with debug_info, not stripped
</code></pre>
<p>运行：（第一行文字不要在意，说明 box86 在起作用）</p>
<pre><code>root@ubuntu:/home/rainbow# ./m
Box86 with Dynarec v0.2.9 cb09b097 built on Dec  4 2022 06:29:36
Hello
</code></pre></section>
    <section>
      <footer class="page-footer">
		<hr>

    <div class="previous-post" style="display:inline-block;">
      
      <a class="link-reverse" href="https://rainbowc0.gitee.io/post/hello-hugo/?ref=footer">« Hello Hugo</a>
      
    </div>

    <div class="next-post", style="display:inline-block;float:right;">
      
      <a class="link-reverse" href="https://rainbowc0.gitee.io/post/efficency-of-loop-in-octave/?ref=footer">测试 GNU Octave 各种遍历的时间效率 »</a>
      
    </div>

		<ul class="page-footer-menu">

      
      

      
      <li><a href="https://github.com/RainbowC0"><i class='fab fa-github fa-lg'></i></a></li>
      

      

      

      

      

      

      

      

      

      

      
      
      
		</ul>

  

	<div class="copyright">
	<p>
    
      &copy; 2024
    .
    All rights reserved.
    
  </p>
</div>
</footer>

    </section>
  </article>
</div>

    </body>

</html>